package oj;

import java.util.*;

public class Num350 {
    public int[] intersect(int[] nums1, int[] nums2) {
        Map<Integer,Integer> nums1Map=new HashMap<>();
        for (int i = 0; i < nums1.length; i++) {
            nums1Map.put(nums1[i],nums1Map.getOrDefault(nums1[i],0)+1);
        }
        ArrayList<Integer> list=new ArrayList<>();
        //遍历nums2当map中元素的次数大于nums的长度，只可能取到nums的长度，满足题目中所说的若出现次数不一致以小的为准
        //若map中元素的次数等于nums的次数，输出一致
        //若map中元素的次数小于nums的次数，在第一次遍历到这个元素时就在map中删掉，防止下一个相同的元素添加，同时在list中添加
        for (int i = 0; i < nums2.length; i++) {
          if(nums1Map.containsKey(nums2[i])){
              int k=nums1Map.get(nums2[i]);
              if(k>1){
                  nums1Map.put(nums2[i],k-1);
              }else {
                  nums1Map.remove(nums2[i]);
              }
              list.add(nums2[i]);
            }
        }
        int[] ret=new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            ret[i]=list.get(i);
        }
        return ret;
    }
}
